// Copyright 2014-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

(function () {
  'use strict';

  /*
   * This file extends the libphonenumber object with a set of phonenumbery
   * utility functions. libphonenumber must be included before you call these
   * functions, but the order of the files/script-tags doesn't matter.
   */

  window.libphonenumber = window.libphonenumber || {};
  window.libphonenumber.util = {
    getRegionCodeForNumber: function (number) {
      try {
        var parsedNumber = libphonenumber.parse(number);
        return libphonenumber.getRegionCodeForNumber(parsedNumber);
      } catch (e) {
        return 'ZZ';
      }
    },

    splitCountryCode: function (number) {
      var parsedNumber = libphonenumber.parse(number);
      return {
        country_code: parsedNumber.values_[1],
        national_number: parsedNumber.values_[2],
      };
    },

    getCountryCode: function (regionCode) {
      var cc = libphonenumber.getCountryCodeForRegion(regionCode);
      return cc !== 0 ? cc : '';
    },

    parseNumber: function (number, defaultRegionCode) {
      try {
        var parsedNumber = libphonenumber.parse(number, defaultRegionCode);

        return {
          isValidNumber: libphonenumber.isValidNumber(parsedNumber),
          regionCode: libphonenumber.getRegionCodeForNumber(parsedNumber),
          countryCode: '' + parsedNumber.getCountryCode(),
          nationalNumber: '' + parsedNumber.getNationalNumber(),
          e164: libphonenumber.format(
            parsedNumber,
            libphonenumber.PhoneNumberFormat.E164
          ),
        };
      } catch (ex) {
        return { error: ex, isValidNumber: false };
      }
    },

    getAllRegionCodes: function () {
      return {
        AD: 'Andorra',
        AE: 'United Arab Emirates',
        AF: 'Afghanistan',
        AG: 'Antigua and Barbuda',
        AI: 'Anguilla',
        AL: 'Albania',
        AM: 'Armenia',
        AO: 'Angola',
        AR: 'Argentina',
        AS: 'AmericanSamoa',
        AT: 'Austria',
        AU: 'Australia',
        AW: 'Aruba',
        AX: 'Åland Islands',
        AZ: 'Azerbaijan',
        BA: 'Bosnia and Herzegovina',
        BB: 'Barbados',
        BD: 'Bangladesh',
        BE: 'Belgium',
        BF: 'Burkina Faso',
        BG: 'Bulgaria',
        BH: 'Bahrain',
        BI: 'Burundi',
        BJ: 'Benin',
        BL: 'Saint Barthélemy',
        BM: 'Bermuda',
        BN: 'Brunei Darussalam',
        BO: 'Bolivia, Plurinational State of',
        BR: 'Brazil',
        BS: 'Bahamas',
        BT: 'Bhutan',
        BW: 'Botswana',
        BY: 'Belarus',
        BZ: 'Belize',
        CA: 'Canada',
        CC: 'Cocos (Keeling) Islands',
        CD: 'Congo, The Democratic Republic of the',
        CF: 'Central African Republic',
        CG: 'Congo',
        CH: 'Switzerland',
        CI: "Cote d'Ivoire",
        CK: 'Cook Islands',
        CL: 'Chile',
        CM: 'Cameroon',
        CN: 'China',
        CO: 'Colombia',
        CR: 'Costa Rica',
        CU: 'Cuba',
        CV: 'Cape Verde',
        CX: 'Christmas Island',
        CY: 'Cyprus',
        CZ: 'Czech Republic',
        DE: 'Germany',
        DJ: 'Djibouti',
        DK: 'Denmark',
        DM: 'Dominica',
        DO: 'Dominican Republic',
        DZ: 'Algeria',
        EC: 'Ecuador',
        EE: 'Estonia',
        EG: 'Egypt',
        ER: 'Eritrea',
        ES: 'Spain',
        ET: 'Ethiopia',
        FI: 'Finland',
        FJ: 'Fiji',
        FK: 'Falkland Islands (Malvinas)',
        FM: 'Micronesia, Federated States of',
        FO: 'Faroe Islands',
        FR: 'France',
        GA: 'Gabon',
        GB: 'United Kingdom',
        GD: 'Grenada',
        GE: 'Georgia',
        GF: 'French Guiana',
        GG: 'Guernsey',
        GH: 'Ghana',
        GI: 'Gibraltar',
        GL: 'Greenland',
        GM: 'Gambia',
        GN: 'Guinea',
        GP: 'Guadeloupe',
        GQ: 'Equatorial Guinea',
        GR: 'Ελλάδα',
        GT: 'Guatemala',
        GU: 'Guam',
        GW: 'Guinea-Bissau',
        GY: 'Guyana',
        HK: 'Hong Kong',
        HN: 'Honduras',
        HR: 'Croatia',
        HT: 'Haiti',
        HU: 'Magyarország',
        ID: 'Indonesia',
        IE: 'Ireland',
        IL: 'Israel',
        IM: 'Isle of Man',
        IN: 'India',
        IO: 'British Indian Ocean Territory',
        IQ: 'Iraq',
        IR: 'Iran, Islamic Republic of',
        IS: 'Iceland',
        IT: 'Italy',
        JE: 'Jersey',
        JM: 'Jamaica',
        JO: 'Jordan',
        JP: 'Japan',
        KE: 'Kenya',
        KG: 'Kyrgyzstan',
        KH: 'Cambodia',
        KI: 'Kiribati',
        KM: 'Comoros',
        KN: 'Saint Kitts and Nevis',
        KP: "Korea, Democratic People's Republic of",
        KR: 'Korea, Republic of',
        KW: 'Kuwait',
        KY: 'Cayman Islands',
        KZ: 'Kazakhstan',
        LA: "Lao People's Democratic Republic",
        LB: 'Lebanon',
        LC: 'Saint Lucia',
        LI: 'Liechtenstein',
        LK: 'Sri Lanka',
        LR: 'Liberia',
        LS: 'Lesotho',
        LT: 'Lithuania',
        LU: 'Luxembourg',
        LV: 'Latvia',
        LY: 'Libyan Arab Jamahiriya',
        MA: 'Morocco',
        MC: 'Monaco',
        MD: 'Moldova, Republic of',
        ME: 'Црна Гора',
        MF: 'Saint Martin',
        MG: 'Madagascar',
        MH: 'Marshall Islands',
        MK: 'Macedonia, The Former Yugoslav Republic of',
        ML: 'Mali',
        MM: 'Myanmar',
        MN: 'Mongolia',
        MO: 'Macao',
        MP: 'Northern Mariana Islands',
        MQ: 'Martinique',
        MR: 'Mauritania',
        MS: 'Montserrat',
        MT: 'Malta',
        MU: 'Mauritius',
        MV: 'Maldives',
        MW: 'Malawi',
        MX: 'Mexico',
        MY: 'Malaysia',
        MZ: 'Mozambique',
        NA: 'Namibia',
        NC: 'New Caledonia',
        NE: 'Niger',
        NF: 'Norfolk Island',
        NG: 'Nigeria',
        NI: 'Nicaragua',
        NL: 'Netherlands',
        NO: 'Norway',
        NP: 'Nepal',
        NR: 'Nauru',
        NU: 'Niue',
        NZ: 'New Zealand',
        OM: 'Oman',
        PA: 'Panama',
        PE: 'Peru',
        PF: 'French Polynesia',
        PG: 'Papua New Guinea',
        PH: 'Philippines',
        PK: 'Pakistan',
        PL: 'Polska',
        PM: 'Saint Pierre and Miquelon',
        PR: 'Puerto Rico',
        PS: 'Palestinian Territory, Occupied',
        PT: 'Portugal',
        PW: 'Palau',
        PY: 'Paraguay',
        QA: 'Qatar',
        RE: 'Réunion',
        RO: 'Romania',
        RS: 'Србија',
        RU: 'Russia',
        RW: 'Rwanda',
        SA: 'Saudi Arabia',
        SB: 'Solomon Islands',
        SC: 'Seychelles',
        SD: 'Sudan',
        SE: 'Sweden',
        SG: 'Singapore',
        SH: 'Saint Helena, Ascension and Tristan Da Cunha',
        SI: 'Slovenia',
        SJ: 'Svalbard and Jan Mayen',
        SK: 'Slovakia',
        SL: 'Sierra Leone',
        SM: 'San Marino',
        SN: 'Senegal',
        SO: 'Somalia',
        SR: 'Suriname',
        ST: 'Sao Tome and Principe',
        SV: 'El Salvador',
        SY: 'Syrian Arab Republic',
        SZ: 'Swaziland',
        TC: 'Turks and Caicos Islands',
        TD: 'Chad',
        TG: 'Togo',
        TH: 'Thailand',
        TJ: 'Tajikistan',
        TK: 'Tokelau',
        TL: 'Timor-Leste',
        TM: 'Turkmenistan',
        TN: 'Tunisia',
        TO: 'Tonga',
        TR: 'Turkey',
        TT: 'Trinidad and Tobago',
        TV: 'Tuvalu',
        TW: 'Taiwan, Province of China',
        TZ: 'Tanzania, United Republic of',
        UA: 'Ukraine',
        UG: 'Uganda',
        US: 'United States',
        UY: 'Uruguay',
        UZ: 'Uzbekistan',
        VA: 'Holy See (Vatican City State)',
        VC: 'Saint Vincent and the Grenadines',
        VE: 'Venezuela',
        VG: 'Virgin Islands, British',
        VI: 'Virgin Islands, U.S.',
        VN: 'Viet Nam',
        VU: 'Vanuatu',
        WF: 'Wallis and Futuna',
        WS: 'Samoa',
        YE: 'Yemen',
        YT: 'Mayotte',
        ZA: 'South Africa',
        ZM: 'Zambia',
        ZW: 'Zimbabwe',
      };
    }, // getAllRegionCodes
  }; // libphonenumber.util
})();
